namespace SmartMathLibrary
{
    /// <summary>
    /// Interface to implement an Angle class.
    /// </summary>
    public interface IAngle
    {
        /// <summary>
        /// Gets or sets the radians of the current angle object.
        /// </summary>
        /// <value>The radians of the current angle object.</value>
        double Radians { get; set; }

        /// <summary>
        /// Calculates the sin of the current angle.
        /// </summary>
        /// <returns>The sin value of the current angle.</returns>
        double Sin();

        /// <summary>
        /// Calculates the cos of the current angle.
        /// </summary>
        /// <returns>The cos value of the current angle.</returns>
        double Cos();

        /// <summary>
        /// Calculates the tan of the current angle.
        /// </summary>
        /// <returns>The tan value of the current angle.</returns>
        double Tan();

        /// <summary>
        /// Calculates the arcos of the current angle.
        /// </summary>
        /// <returns>The acos value of the current angle.</returns>
        double Acos();

        /// <summary>
        /// Calculates the asin of the current angle.
        /// </summary>
        /// <returns>The asin value of the current angle.</returns>
        double Asin();

        /// <summary>
        /// Calculates the atan of the current angle.
        /// </summary>
        /// <returns>The atan value of the current angle.</returns>
        double Atan();

        /// <summary>
        /// Calculates the cosh of the current angle.
        /// </summary>
        /// <returns>The cosh value of the current angle.</returns>
        double Cosh();

        /// <summary>
        /// Calculates the sinh of the current angle.
        /// </summary>
        /// <returns>The sinh value of the current angle.</returns>
        double Sinh();

        /// <summary>
        /// Calculates the tanh of the current angle.
        /// </summary>
        /// <returns>The tanh value of the current angle.</returns>
        double Tanh();

        /// <summary>
        /// Compares the current instance to another angle object.
        /// </summary>
        /// <param name="compare">The instance to compare.</param>
        /// <returns>True if the radians of both instances are even otherwise, false.</returns>
        bool CompareTo(Angle compare);

        /// <summary>
        /// Copies the current instance of the angle object.
        /// </summary>
        /// <returns>A copy of the current instance.</returns>
        Angle Copy();
    }
}